一个最小的Flask应用
1 2 3 4 5 6 7
| (1).导入了Flask类,这个类的实例将会是我们的WSGI应用程序。 (2).创建一个该类的实例,第一个参数是应用模块或者包的名称 如果你使用单一的模块(如本例),你应该使用 __name__ 因为模块的名称将会因其作为单独应用启动还是作为模块导入而有不同( 也即是 '__main__' 或实际的导入名) (3).使用route()装饰器告诉Flask什么样的URL能触发我们的函数 (4).用run()函数来让应用运行在本地服务器上 其中if __name__ == '__main__': 确保服务器只会在该脚本被Python解释器直接执行的时候才会运行,而不是作为模块导入的时候。
|
main.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| from flask import Flask
app = Flask(__name__)
@app.route('/hello') def hello_world(): return 'Hello World!'
if __name__ == '__main__': app.run(host='0.0.0.0',port=35016)
|


路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| from flask import Flask
app = Flask(__name__)
@app.route('/Index') def index(): return 'Index Page'
@app.route('/hello') def hello_world(): return 'Hello World!'
if __name__ == '__main__': app.run(host='0.0.0.0')
|
在浏览器访问http://115.28.240.96:5000/hello

在浏览器访问http://115.28.240.96:5000/Index

构造URL
1 2 3 4 5 6 7
| 如果Flask能匹配URL,那么Flask可以生成它们吗?
你可以用url_for()来给指定的函数构造URL
它接受函数名作为第一个参数,也接受对应URL规则的变量部分的命名参数
未知变量部分会添加到URL末尾作为查询参数
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
from flask import Flask, url_for
app = Flask(__name__)
@app.route('/') def index(): pass
@app.route('/login') def login(): return "login"
@app.route('/user/<username>') def profile(username): print "username", username return username
with app.test_request_context(): print url_for('index') print url_for('login') print url_for('login', next='/') print url_for('profile', username='John Doe')
if __name__ == '__main__': app.run(host='0.0.0.0')
|

HTTP方法
1 2 3
| HTTP (与 Web 应用会话的协议)有许多不同的访问 URL 方法
默认情况下,路由只回应GET请求,但是通过route()装饰器传递methods参数可以改变这个行为
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
from flask import Flask, request, url_for
app = Flask(__name__)
@app.route('/Index', methods=['GET', 'POST']) def index(): return 'Index Page'
@app.route('/login', methods=['GET', 'POST']) def login(): if request.method == 'POST': pass else: pass return "login"
@app.route('/user/<username>', methods=['GET', 'POST']) def profile(username): print "username", username return username
with app.test_request_context(): print url_for('index') print url_for('login') print url_for('login', next='/') print url_for('profile', username='John Doe')
if __name__ == '__main__': app.run(host='0.0.0.0')
|
静态文件
1 2 3 4 5
| 动态web应用也会需要静态文件,通常是CSS和JavaScript文件
你已经配置好Web服务器来提供静态文件,但是在开发中,Flask也可以做到。
只要在你的包中或是模块的所在目录中创建一个名为static的文件夹,在应用中使用/static即可访问。
|
1
| url_for('static', filename='style.css')
|
模板渲染
1 2 3 4 5 6 7
| Flask配备了Jinja2模板引擎。
可以使用render_template()方法来渲染模板
你需要做的一切就是将模板名和你想作为关键字的参数传入模板的变量
Flask 会在 templates 文件夹里寻找模板
|
模板实例
1 2 3 4 5 6 7
| <!doctype html> <title>Hello from Flask</title> {% if name %} <h1>Hello {{ name }}!</h1> {% else %} <h1>Hello World!</h1> {% endif %}
|
1 2 3
| @app.route('/hello/<name>') def hello(name=None): return render_template('componentloginpage.html',name=name)
|

重定向
1 2 3 4 5
| from flask import abort, redirect, url_for
@app.route('/') def index(): return redirect(url_for('login'))
|
错误
1 2 3
| @app.route('/login') def login(): abort(401)
|